﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CommonClasses.Utility;
using Eco.ObjectRepresentation;
using Eco.Services;
using System.IO;

namespace CommandListsVerifier
{
    /// <summary>
    /// Загрузчик описания данных для верификации
    /// </summary>
    class VerifierDomainModelLoader
    {
        /// <summary>
        /// Провайдер сервисов ECO
        /// </summary>
        private IEcoServiceProvider ecoServiceProvider;

        /// <summary>
        /// Загрузить описание данных для верификации
        /// </summary>
        /// <returns>
        /// Описание данных для верификации
        /// </returns>
        public VerifierDomainModel LoadVerifierDMFromfile()
        {
            var dm = (ecoServiceProvider.GetEcoService<IOclService>().Evaluate("DomainModel.allInstances->first").AsObject as Descriptions_DomainModel.Model.DomainModel);
            string verDMDir = Path.GetDirectoryName(dm.PathNoExt) + "\\config_CL";
            PathUtility.RestoreCurrentDirectory(Locality.ExeFile);
            return SerializationUtility.DeserializeFromFile<VerifierDomainModel>(verDMDir + "\\verDM.clcfg");
        }

        /// <summary>
        /// Сохранить описание данных для верификации в файл
        /// </summary>
        /// <param name="verDM">Описание данных для верификации</param>
        public void SaveVerifierDMTofile(VerifierDomainModel verDM)
        {
            var dm = (ecoServiceProvider.GetEcoService<IOclService>().Evaluate("DomainModel.allInstances->first").AsObject as Descriptions_DomainModel.Model.DomainModel);
            string verDMDir = Path.GetDirectoryName(dm.PathNoExt) + "\\config_CL";
            PathUtility.RestoreCurrentDirectory(Locality.ExeFile);
            SerializationUtility.SerializeToFile<VerifierDomainModel>(verDMDir + "\\test_verDM.clcfg", verDM);
        }

        /// <summary>
        /// Конструктор загрузчика описания данных верификации
        /// </summary>
        /// <param name="ecoServiceProvider">Провайдер сервисов ECO</param>
        public VerifierDomainModelLoader(IEcoServiceProvider ecoServiceProvider)
        {
            this.ecoServiceProvider = ecoServiceProvider;
        }
    }
}
